home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 1
/
Nebula One.iso
/
Utilities
/
Unix
/
satan-1.1.1
/
reconfig
< prev
next >
Wrap
Text File
|
1995-04-08
|
5KB
|
168 lines
#!/bin/sh -- need to mention perl here to avoid recursion
'true' || eval 'exec perl -S $0 $argv:q';
eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}'
& eval 'exec /usr/local/bin/perl -S $0 $argv:q'
if 0;
#
# version 1, Sun Mar 26 18:31:28 1995, last mod by zen
#
# Usage: [perl] reconfig [file]
#
# This replaces the program paths (e.g. /bin/awk) in SATAN with an
# alternate path that is found in the file "file.paths". It also finds
# perl5 (or at least tries!) and changes the path in all the stand-alone
# perl programs.
#
# all the HTML browsers we know about, IN ORDER OF PREFERENCE!
@all_www= ("netscape", "Mosaic", "xmosaic", "lynx");
#
# Potential directories to find commands; first, find the user's path...
$PATH = $ENV{"PATH"};
# additional dirs; *COLON* separated!
$other_dirs="/usr/ccs/bin:/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/ucb/bin:/usr/sbin:/usr/etc:/usr/local/bin:/usr/bin/X11:/usr/X11/bin:/usr/openwin/bin";
#
# split into a more reasonable format. Personal aliases come last.
@all_dirs = split(/:/, $other_dirs . ":" . $PATH);
#
# Target shell scripts in question:
@shell_scripts=("config/paths.pl", "config/paths.sh");
@perl5_src = <bin/get_targets bin/faux_fping satan bin/*.satan perl/html.pl>;
#
# Target shell commands in question
@all_commands=("cc", "cat", "chmod", "cmp", "comm", "cp", "date", "diff",
"egrep", "expr", "find", "grep", "ls", "mail", "mkdir", "mv", "rm",
"sed", "sh", "sort", "tftp", "touch", "uniq", "uudecode", "ypcat",
"strings", "finger", "ftp", "rpcinfo", "rusers", "showmount", "ping",
"ypwhich", "nslookup", "xhost", "su", "awk", "sed", "test", "whoami",
"basename", "echo", "file");
print "checking to make sure all the target(s) are here...\n";
for (@shell_scripts) {
die "ERROR -- $_ not found!\n" unless -f $_;
}
# find perl5!
print "Ok, trying to find perl5 now... hang on a bit...\n";
for $dir (@all_dirs) {
# first, find where it might be; oftentimes you'll see perl,
# perl4, perl5, etc. in the same dir
next if (! -d $dir);
while (<$dir/perl5* $dir/perl*>) {
if (-x $_) {
$perl_version=`($_ -v 2> /dev/null) |
awk '/This is perl, version 5/ { print $NF }'`;
if ($perl_version) {
$PERL=$_;
$pflag="1";
last;
}
}
last if $pflag;
}
last if $pflag;
}
die "\nCan't find perl5! Bailing out...\n" unless $PERL;
print "\nPerl5 is in $PERL\n";
for (@perl5_src) { $perl5_src .= "$_ "; }
print "\nchanging the source in: $perl5_src\n";
system "$PERL -pi -e \"s@^#!.*/perl.*@#!$PERL@;\" $perl5_src";
# make sure things are executable...
system("chmod u+x $perl5_src");
# find the most preferred www viewer first.
for $www (@all_www) {
for $dir (@all_dirs) {
if (!$MOSAIC) {
if (-x "$dir/$www") {
$MOSAIC="$dir/$www";
next;
}
}
}
}
if ($MOSAIC) {
print "\nHTML/WWW Browser is $MOSAIC\n";
$upper{"MOSAIC"} = $MOSAIC;
}
else { print "Cannot find a web browser! SATAN cannot be run except in CLI"; }
print "\nSo far so good...\nLooking for all the commands now...\n";
for $command (@all_commands) {
$found="";
for $dir (@all_dirs) {
# special case rsh/remsh; if we can find remsh, ignore rsh
if ($command eq "rsh") {
# print "looking for rsh/remsh ($dir/$command)\n";
if (-f "$dir/remsh") {
# this converts to upper case
($upper = $command) =~ y/[a-z]/[A-Z]/;
$found="true";
$upper{$upper} = "$dir/remsh";
print "found $dir/remsh; using this instead of rsh\n";
last;
}
}
# if find the command in one of the directories, print string
if (-f "$dir/$command") {
# this converts to upper case
($upper = $command) =~ y/[a-z]/[A-Z]/;
$found="true";
$upper{$upper} = "$dir/$command";
# print "found ($upper) $dir/$command\n";
# if it's rsh we're examining, keep looking; else quit
last unless $command eq "rsh";
}
}
print "\nAEEEIIII...!!! can't find $command\n\n" unless $found;
}
print "\nOk, now doing substitutions on the shell scripts...\n";
for $shell (@shell_scripts) {
print "Changing paths in $shell...\n";
die "Can't open $shell\n" unless open(SCRIPT, $shell);
rename($shell, $shell . '.old');
die "Can't open $shell\n" unless open(OUT, ">$shell");
#
# Open up the script, search for lines beginning with
# stuff like "TEST", "AWK", etc. If the file ends in "pl",
# assume it's a perl script and change it accordingly
while (<SCRIPT>) {
$found = 0;
for $command (keys %upper) {
if(/^\$?$command=/) {
# shell script
if ($shell !~ /.pl$/) {
print OUT "$command=$upper{$command}\n";
}
# perl script
else {
print OUT "\$" . "$command=\"$upper{$command}\";\n";
}
$found = 1;
}
}
print OUT $_ if !$found;
}
close(SCRIPT);
close(OUT);
}
# done...